#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>


//int main(int argc, char* argv[], char* env[])
//{
//  char* path = getenv("HELLO");
//  if(path == NULL)
//  {
//    return 1;
//  }
//  printf("HELLO: %s\n", path);


  //int i = 0;
  //for(i = 0; env[i]; i++)
  //{
  //  printf("environ[%d]->%s\n", i, env[i]);
  //}
  


  //fork();
  //int i = 0;
  //extern char** environ;
  //for(i = 0; environ[i]; i++)
  //{
  //  printf("environ[%d]->%s\n", i, environ[i]);
  //}
//}

int g_val = 100;

// fork()的返回值为0时，这个返回是在子进程中进行的，
// fork()的返回值大于0时，这个返回是在父进程中进行的，且返回值为子进程的pid
// fork()的返回值小于0时，创建子进程失败
int main()
{
  printf("father process is running, pid: %d, ppid: %d\n", getpid(), getppid());
  pid_t id = fork();
  if(id == 0)
  {
    //child
    int cnt = 0;
    while(1)
    {
      printf("I am child process, pid: %d, ppid: %d, g_val: %d, &g_val: %p\n", getpid(), getppid(), g_val, &g_val);
      sleep(1);
      cnt++;
      if(cnt == 5)
      {
        g_val = 300;
        printf("I am child process, change %d -> %d", 100, 300);
      }
    }
  }
  else if(id > 0)
  {
    //father
    while(1)
    {
      printf("I am father process, pid: %d, ppid: %d, g_val: %d, &g_val: %p\n", getpid(), getppid(), g_val, &g_val);
      sleep(1);
    }
  }

  return 0;
}









//int g_val = 100000;

//int main()
//{
//  printf("I am father process, pid: %d, ppid: %d,  g_val: %d\n", getpid(), getppid(), g_val);
//  sleep(5);
//  pid_t id = fork();
//  if(id == 0)
//  {
//    //child
//    while(1)
//    {
//       printf("I am child process, pid: %d, ppid: %d,  g_val: %d\n", getpid(), getppid(), g_val);
//       sleep(1);
//    }
//  }
//  else
//  {
//    //father
//    while(1)
//    {
//       printf("I am father process, pid: %d, ppid: %d,  g_val: %d\n", getpid(), getppid(), g_val);
//       sleep(1);
//    }
//  }
//}
//

//int main(int argc, char *argv[])
//{
//  printf("I am father process, pid: %d, ppid: %d,  g_val: %d\n", getpid(), getppid(), g_val);
//  if(argc != 2)
//  {
//    printf("Usage: %s -[a, b, c, d]\n", argv[0]);
//    return 1;
//  }
//
//  if(strcmp(argv[1], "-a") == 0)
//  {
//    printf("this is function1\n");
//  }
//
//  else if(strcmp(argv[1], "-b") == 0)
//  {
//    printf("this is function2\n");
//  }
//
//  else if(strcmp(argv[1], "-c") == 0)
//  {
//    printf("this is function3\n");
//  }
//
//  else if(strcmp(argv[1], "-d") == 0)
//  {
//    printf("this is function4\n");
//  }
//
//  else
//  {
//    printf("no this function!!\n");
//  }
//
//  //int i = 0;
//  //for(i = 0; argv[i]; i++)
//  //{
//  //  printf("argv[%d]->%s\n", i, argv[i]); 
//  //}
//}
